package models

import (
	"fmt"
	"math"
	"math/rand"
	"strconv"
	"strings"
)

func 砸宝_获取物品属性个数(物品 *Struct物品列表) int {

	if len(物品.V附加属性) == 0 {
		return 0
	}
	return strings.Count(物品.V附加属性, "\n") + 1
}
func 砸宝_随机删除一个属性(物品 *Struct物品列表) bool {
	return false
}

//功能 	随机添加一个属性
//返回值  0:失败  1:消失  2:成功

func 砸宝_升级一个属性(物品 *Struct物品列表, 选择项 int) int {
	//先确定会添加哪个属性
	/*var 升级表 []*Struct附加属性信息
	if t, ok := m_附加属性信息.Load(物品.V名称1); ok == false { //取出物品升级对应表
		return 0
	} else {
		升级表 = t.([]*Struct附加属性信息)
	}*/
	物品信息 := 物品_获取物品信息(物品.V信息ID)
	属性个数 := 砸宝_获取物品属性个数(物品)
	if 选择项 == -1 {
		选择项 = rand.Intn(1000) % 属性个数
	}
	属性行 := strings.Split(物品.V附加属性, "\n")
	行分割 := strings.Split(属性行[选择项], " ")
	属性等级 := 1
	if len(行分割) == 2 {
		if t, err := strconv.Atoi(行分割[1]); err == nil {
			属性等级 = t
		}
	}
	附加属性信息 := m_附加属性信息[行分割[0]]
	if 附加属性信息 == nil {
		return 0
	}
	幸运 := float32(rand.Intn(100))
	累加合 := (1.0 - 幸运/100) * 附加属性信息.V幸运比重
	累加合 += (1 - float32(物品.V当前耐久)/1000) * 附加属性信息.V耐久比重
	累加合 += float32(物品信息.V等级/20) * 附加属性信息.V物品等级比重
	累加合 += float32(属性等级/int(m_物品最亮等级)) * 附加属性信息.V属性等级比重
	计算值 := math.Pow(float64(累加合), float64(附加属性信息.V升级幂))
	计算值 = 计算值 / float64(m_历史长河.V砸宝倍率)
	运算 := int(计算值)
	if 运算 <= 10 {
		运算 = 10
	} else if 运算 > 999999999 {
		运算 = 999999999
	}
	最终值 := rand.Intn(运算)
	if 最终值 <= 10 { //恭喜，升级
		属性等级++
		//重新对属性进行定义
		物品.V附加属性 = ""
		for i := 0; i < 选择项; i++ {
			if i != 0 {
				物品.V附加属性 += "\n"
			}
			物品.V附加属性 += 属性行[i]
		}
		for i := 选择项 + 1; i < 属性个数; i++ {
			if len(物品.V附加属性) != 0 {
				物品.V附加属性 += "\n"
			}
			物品.V附加属性 += 属性行[i]
		}
		if len(物品.V附加属性) != 0 {
			物品.V附加属性 += "\n"
		}
		物品.V附加属性 += fmt.Sprintf("%s %d", 行分割[0], 属性等级) //新升级的，排列到最后
		物品.Stata.V修改 = true
		物品.Stata.V更新字段["V附加属性"] = true
		return 2
	}
	if rand.Intn(100) <= 10 { //百分之十的消失机率
		return 1
	}
	return 0
}

//功能 随机添加一个属性，只返回成功与失败
func 砸宝_随机添加一个属性(物品 *Struct物品列表) bool {
	//第一步 获取已有属性
	var 已有属性 []string
	if len(物品.V附加属性) != 0 {
		属性行 := strings.Split(物品.V附加属性, "\n")
		for _, v := range 属性行 {
			sp := strings.Split(v, " ")
			已有属性 = append(已有属性, sp[0])
		}
	}
	物品信息 := 物品_获取物品信息(物品.V信息ID)
	属性个数 := 砸宝_获取物品属性个数(物品)
	//第二步 开始遍历属性表 随机一个属性
	for _, v := range m_附加属性信息 {
		if (v.V穿戴位置掩码 & 物品信息.V穿戴位置) == 0 {
			continue
		}
		if (v.V职业掩码 & 物品信息.V职业) == 0 {
			continue
		}
		if (v.V物品等级掩码 & (1 << uint32(物品信息.V等级))) == 0 {
			continue
		}
		if uint16(属性个数) < v.V最少属性个数 {
			continue
		}
		if uint16(属性个数) > v.V最多属性个数 {
			continue
		}
		已存在 := false
		for _, vv := range 已有属性 {
			if vv == v.V中文名 {
				已存在 = true
			}
		}
		if 已存在 == true {
			continue
		}
		if v.V附魔概率 == 0 {
			v.V附魔概率 = 1
		}
		if rand.Intn(int(v.V附魔概率)) > 10 {
			continue
		}
		if len(物品.V附加属性) != 0 {
			物品.V附加属性 += "\n"
		}
		物品.V附加属性 += v.V中文名 + " 1" //设备新的属性
		物品.Stata.V修改 = true       //物品已更新
		物品.Stata.V更新字段["V附加属性"] = true
		return true
	}
	return false //不成功或没有属性了
}
